<?PHP
// Pas d'accès direct à ce fichier, vérification de l'existence de la variable définie dans le fichier qui l'appelle
if (!isset($SECURITE)){exit();}

function moodle_inscrire_cour ($USER,$cours_id) 
// Inscrire un utilisateur à  un cours dans moodle
{
 GLOBAL $CFG;
	
	// Recherchons la fiche du cours à inscrire avec le rôle par défaut de ce cours
	if (!$course = get_record('course', 'id', $cours_id, '', '', '', '', 'id, shortname, defaultrole, visible')) 
  {
   return false; // Si on a pas la fiche du cours à inscrire on ne peut pas aller plus loin.
  }
   
  // Role par défaut : on prend celui du cours s'il existe sinon celui du site.
  if (empty($course->defaultrole)) {
    $rid = $CFG->defaultcourseroleid;
  } else {
    $rid = $course->defaultrole;
  }
  if ($course->visible==0)
  {return 2;} // Il s'agit d'un cours caché, on n'inscrit pas la personne
  
  // Quel est le contexte de ce cours ?
  $coursecontext = get_context_instance(CONTEXT_COURSE, $cours_id);
  
     // Ajoutons le role par défaut à l'utilisateur pour ce context
    if (role_assign($rid, $USER->id, 0, $coursecontext->id)) 
    {
        return 1; // Si èa s'est bien passé
    } 
    else 
    {
        return 0; // En cas d'erreur pour le tracking
    }
}

function moodle_desinscrire_cour ($USER,$cours_id) 
// Désinscrire un utilisateur à  un cours dans moodle
{
 GLOBAL $CFG;
// Recherchons la fiche du cours à inscrire avec le rôle par défaut de ce cours
	if (!$course = get_record('course', 'id', $cours_id, '', '', '', '', 'id, shortname, defaultrole, visible')) 
  {
   return false; // Si on a pas la fiche du cours à désinscrire on ne peut pas aller plus loin.
  }
   
  // Role par défaut : on prend celui du cours s'il existe sinon celui du site.
  if (empty($course->defaultrole)) {
    $rid = $CFG->defaultcourseroleid;
  } else {
    $rid = $course->defaultrole;
  }
  // Quel est le contexte de ce cours ?
  $coursecontext = get_context_instance(CONTEXT_COURSE, $cours_id);
  
                 // Supprimons le role par défaut à l'utilisateur pour ce context
                if (role_unassign($rid, $USER->id, 0, $coursecontext->id)) 
                {
                    return 1; // Si ça s'est bien passé
                } 
                else 
                {
                    return 0; // En cas d'erreur pour le tracking
                }
}

function moodle_get_my_courses($user_id, $sort='visible DESC,sortorder ASC', $fields=NULL, $doanything=false,$limit=0) 
// Récupérer toutes les infos de tous les cours dans moodle de l'utilisateur
{
  return get_my_courses($user_id, $sort, $fields, $doanything,$limit);
}

function moodle_get_my_courses_array($user_id) 
// Codes des cours de moodle pour l'utilisateur, séparées par un caractà¿re de séparation.
{

	$liste = "";
	$courses=get_my_courses($user_id);
	$separator="";
	foreach ($courses as $course) {
				$liste.=$separator.$course->id;
				$separator=";";
        }
	return $liste;

}

function moodle_get_complete_user_data($username) 
// Récupérer toutes les infos de l'utilisateur dans MOODLE
// Entrée : Login de l'utilisateur
// Sortie : Objet correspondant à toute la fiche Moodle de l'utilisateur
{
	return get_complete_user_data('username', $username);
}

function moodle_cours_a_inscrire($liste_cours,$user)
// Entrée : liste des cours théorique o¨ l'utilisateur doit être inscrit + Fiche utilisateur Moodle
// Sortie : liste des cours auxquels il n'est pas encore inscrit (donc à inscrire) ; Champ texte contenant les IDs des cours séparés par un point virgule.
{
    
	$liste=$separateur=""; // $liste sera la liste des cours o¨ l'utilisateur devra être inscrit
	$cours_moodle=moodle_get_my_courses_array($user->id); // Cours o¨ est déjà inscrit l'utilisateur
	$cours_moodle=explode(";",$cours_moodle); // Mettons le sous forme de tableau
  			
	foreach($liste_cours as $cours) // Pour chacun des cours à inscrire
	{
			// Récupération des infos complètes du cours
  			if (array_search($cours, $cours_moodle)===false) // Est-ce que l'utilisateur est déjà inscrit à ce cours 
  			{
  				$liste.=$separateur.$cours; // Non alors ajoutons ce cours dans $liste
  				$separateur=";";
  			}
	}

	return $liste; // Voici donc tous les cours o¨ l'utilisateur doit être réellement inscrit
}

function moodle_create_user($user)
// Ajouter un utilisateur à moodle non déjà présent
{
global $CFG;
global $CONF_auth_defaut;


        $user_add->auth         = $CONF_auth_defaut;
        $user_add->firstname    = $user['Prenom'];
        $user_add->lastname     = $user['Nom'];
        $user_add->username     = $user['Login'];
        $user_add->password     = "motdepasse";
		    $user_add->password = hash_internal_user_password($user_add->password);
		
        $user_add->email        = $user['Mail'];
        $user_add->lang         = $CFG->lang;
        $user_add->mnethostid    = 1;
		    $user_add->confirmed    = 1;
        $user_add->timemodified = time();

	
			if (!$user_add->id = insert_record('user', $user_add)) {
                return false;
            }
            return true;
		

/*
Information récupérée de user/editavanced.php
Liste des champs envoyés lors de la création d'un utilisateur :

+ fonction pour crypter le password :
$user_add->password = hash_internal_user_password($user_add->password);

[MAX_FILE_SIZE] => 2097152 
[course] => 1 
[username] => feufeu 
[auth] => manual 
[mform_showadvanced_last] => 0 
[newpassword] => motdepasse 
[preference_auth_forcepasswordchange] => 0 
[firstname] => bénédicte 
[lastname] => Feufeu 
[email] => benedicte.feufeu@wanadoo.fr 
[maildisplay] => 2 
[emailstop] => 0 
[mailformat] => 1 
[maildigest] => 0 
[autosubscribe] => 1 
[trackforums] => 0 
[htmleditor] => 1 
[ajax] => 0 
[screenreader] => 0 
[city] => Angers 
[country] => FR 
[timezone] => 99 
[lang] => fr_utf8 
[description] => 
[imagealt] => 
[interests] => 
[url] => 
[icq] => 
[skype] => 
[aim] => 
[yahoo] => 
[msn] => 
[idnumber] => 
[institution] => 
[department] => 
[phone1] => 
[phone2] => 
[address] => 
[submitbutton] => Enregistrer le profil 
[timemodified] => 1239809376 
[mnethostid] => 1 
[confirmed] => 1 
[password] => 76e2df3fefead34ee08889304c8e1712

*/		
}

function moodle_get_courses($course)
// Récupération sous forme de tableau d'un cours ou de tous les cours
{
	return get_courses($course,"c.sortorder ASC", "c.id, c.shortname, c.fullname, c.category, c.visible, c.password, c.summary, c.enrollable, c.startdate, c.enrolperiod, c.enrolenddate, c.enrolstartdate, c.guest, c.defaultrole");
}

function moodle_list_categories()
{
	$displaylist = array();
	$parentlist = array();
	make_categories_list($displaylist, $parentlist);
		
	$displaylist[0]="Site Moodle";
	return $displaylist;
}

function moodle_liste_enseignants_et_cours()
{
	// id du Role des enseignants
	GLOBAL $CONF_role_enseignant;
	GLOBAL $CONF_role_enseignant_tuteur;

	// Prenons tous les cours de moodle
	$courses = moodle_get_courses("");

	// Création d'un tableau d'enseignants avec leur cours associés :
	foreach ($courses as $course)
	{
		$idcours=$course->id;

			$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);	
			$enseignants=get_role_users($CONF_role_enseignant, $coursecontext);
			
			if ($enseignants)
			{
				foreach ($enseignants as $enseignant)
				{
					$key=$enseignant->lastname." ".$enseignant->firstname." (".$enseignant->username.")";
					$cours_enseignant[$key][]=$idcours;
				}
			}
			
			$enseignants=get_role_users($CONF_role_enseignant_tuteur, $coursecontext);
			
			if ($enseignants)
			{
				foreach ($enseignants as $enseignant)
				{
					$key=$enseignant->lastname." ".$enseignant->firstname." (".$enseignant->username.")";
					$cours_enseignant[$key][]=$idcours;
				
				}
				
			}
	}
	return $cours_enseignant;
}

//utilisé entre autre dans mail.php
//Retourne la liste des enseignant et de leurs espaces 
function moodle_liste_enseignants_et_cours_obj()
{
	// id du Role des enseignants
	GLOBAL $CONF_role_enseignant;
  
  $cours_enseignant=array();
	// Prenons tous les cours de moodle
	$courses = moodle_get_courses("");

	// Création d'un tableau d'enseignants avec leur cours associés :
	foreach ($courses as $course)
	{
		$idcours=$course->id;

			$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);	
			$enseignants=get_role_users($CONF_role_enseignant, $coursecontext);

			if ($enseignants)
			{
				foreach ($enseignants as $enseignant)
				{
				  //print_r($enseignant);
				  unset($enseignant_obj);

					$enseignant_obj->id=$enseignant->id;
					$enseignant_obj->lastname=$enseignant->lastname;
					$enseignant_obj->firstname=$enseignant->firstname;
					$enseignant_obj->username=$enseignant->username;
          if (isset($cours_enseignant[$enseignant->id]->cours))
          {
            $enseignant_obj->cours=$cours_enseignant[$enseignant->id]->cours;
          }
					 $enseignant_obj->cours[]=$course;

					
					$cours_enseignant[$enseignant->id]=$enseignant_obj;

				}
			}
	}
	return $cours_enseignant;
}


function moodle_isadmin($user_id)
// Retourne Vrai ou faux si l'utilisateur est un administrateur de moodle
{
	return isadmin($user_id);
}

function moodle_get_record_course($cours)
{
	return get_record('course', 'id', $cours, '', '', '', '', 'id, shortname, timecreated, fullname, category, defaultrole, visible, password');
}

function moodle_create_course($data)
{
 return create_course($data);
}

function moodle_change_cle($cours_id,$new_cle)
{
//Permet de mettre a jour la clé d'un cours
$course = get_record('course', 'id', $cours_id);

  $data->id=$cours_id;
  $data->category=$course->category;
  $data->password=$new_cle;
  return update_course($data);
}
function moodle_change_cours_visible($cours_id,$visible)
{
//Permet de mettre a jour la visibilité d'un cours
  $data->id=$cours_id;
  $data->category="";
  $data->visible=$visible;
  return update_course($data);
}

function moodle_get_record_user($id_user)
{
	return get_record('user', 'id', $id_user, '', '', '', '', 'id, firstname, lastname, username, email');
}

function moodle_get_etudiants($cours_id)
{
	GLOBAL $CONF_role_etudiant;
	$coursecontext = get_context_instance(CONTEXT_COURSE, $cours_id);
	$etudiants=get_role_users($CONF_role_etudiant, $coursecontext);
	return $etudiants;
}

function moodle_get_enseignants($cours_id)
{
	GLOBAL $CONF_role_enseignant;
  GLOBAL $CONF_role_enseignant_tuteur;
	$coursecontext = get_context_instance(CONTEXT_COURSE, $cours_id);
	$enseignants=get_role_users($CONF_role_enseignant, $coursecontext);
	if ($tuteurs=get_role_users($CONF_role_enseignant_tuteur, $coursecontext))
	{
	 if ($enseignants) // Si y'a déjà des enseignants on fusionne les 2 tableaux
   {$enseignants=array_merge($enseignants,$tuteurs);}
   else // Sinon on prend que les tuteurs
   {$enseignants=$tuteurs;}
  }
	
 
  return $enseignants;
}

function moodle_get_log_user_view_course($user_id,$cours_id)
{
  global $CONF_moodle_bdd_prefixe;
  $sql_count="select count(*) as nb FROM ".$CONF_moodle_bdd_prefixe."log WHERE userid=".$user_id." AND module='course' AND action='view' AND course=".$cours_id;
  $query=mysql_query($sql_count);
  $nb_connection=mysql_fetch_object($query);
  return $nb_connection->nb;
}

function moodle_get_log_last_access($user_id,$cours_id)
{
  global $CONF_moodle_bdd_prefixe;
  $sql_count="select * FROM ".$CONF_moodle_bdd_prefixe."log WHERE userid=".$user_id." AND action='view' AND module='course' AND course=".$cours_id." ORDER BY time DESC";
  $query=mysql_query($sql_count);
  $last=mysql_fetch_object($query);
  if (mysql_num_rows($query)!=0)
    {return date("d/m/Y", $last->time);}
  else
    {return ("Jamais");}
}
/**
* Get a number of records as an array of objects.
*
* Return value as for @see function get_records.
*
* @param string $table the table to query.
* @param string $select A fragment of SQL to be used in a where clause in the SQL call.
* @param string $sort an order to sort the results in (optional, a valid SQL ORDER BY parameter).
* @param string $fields a comma separated list of fields to return
*(optional, by default all fields are returned). The first field will be used as key for the
*   array so must be a unique field such as 'id'.
* @param int $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set).
* @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set).
* @return mixed an array of objects, or false if no records were found or an error occured.
*/
function moodle_get_records_select($table, $select='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
  $rs = get_recordset_select($table, $select, $sort, $fields, $limitfrom, $limitnum);
  return recordset_to_array($rs);
}
    
?>
